package com.kevin.Code.Array;

/**
 * @author Vinlee Xiao
 * @Classname ShortestUnsortedContinuousSubarray
 * @Description Leetcode 581. 最短无序连续子数组 中等难度 Hot100 思路不对
 * @Date 2021/11/21 20:21
 * @Version 1.0
 */
public class ShortestUnsortedContinuousSubarray {


    /**
     *
     * @param nums
     * @return
     */
//    public int findUnsortedSubarray(int[] nums) {
//
//        int len = nums.length;
//        if (len == 1) {
//            return 0;
//        }
//        //找到第一个低于
//        int leftIndex = 1;
//        int rightIndex = len - 1;
//
//        //左边重复的数的个数
//        int dupulicateLeftNum = 0;
//        while (leftIndex < len) {
//
//            //如果当前一个数小于前一个数，则返回
//            if (nums[leftIndex] < nums[leftIndex - 1]) {
//                break;
//            //当前数和前一个数相同
//            } else if (nums[leftIndex] == nums[leftIndex - 1]) {
//                dupulicateLeftNum++;
//            }else {
//                dupulicateLeftNum=0;
//            }
//            leftIndex++;
//        }
//
//        if (leftIndex == len) {
//            return 0;
//        }
//
//        if (leftIndex == len - 1) {
//            return 2 + dupulicateLeftNum;
//        }
//
//        int dupulicateRightNum = 0;
//        while (rightIndex > 0) {
//            if (nums[rightIndex] < nums[rightIndex - 1]) {
//                break;
//            } else if (nums[rightIndex] == nums[rightIndex - 1]) {
//                dupulicateRightNum++;
//            }else {
//                dupulicateRightNum = 0;
//            }
//            rightIndex--;
//        }
//
//
//        return rightIndex - leftIndex + 2 + dupulicateLeftNum + dupulicateRightNum;
//    }

    /**
     * @param nums
     * @return
     */
    public int findUnsortedSubarray(int[] nums) {

        int len = nums.length;
        int min_num = Integer.MAX_VALUE;
        int max_num = Integer.MIN_VALUE;
        int right = -1;
        int left = -1;

        for (int i = 0; i < len; i++) {

            if (max_num > nums[i]) {
                right = i;
            } else {
                max_num = nums[i];
            }

            if (min_num < nums[len - 1 - i]) {
                left = i;
            } else {
                min_num = nums[i];
            }
        }

        return right == -1 ? 0 : right - left + 1;
    }

    public static void main(String[] args) {
        ShortestUnsortedContinuousSubarray shortestUnsortedContinuousSubarray = new ShortestUnsortedContinuousSubarray();
        int[] nums = new int[]{1, 3, 2, 2, 2};
        int num = shortestUnsortedContinuousSubarray.findUnsortedSubarray(nums);
        System.out.println(num);
    }
}
